/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Dentista;


/**
 *
 * @author Soares
 */
public class DentistaDAO {

    private Connection con;
    private PreparedStatement pstm;
    private ResultSet rs;

    public static final int ORDEM_POR_ID = 0;
    public static final int ORDEM_POR_NOME = 1;
    
    public DentistaDAO() throws SQLException {
        //Registra o conector com o banco de dados através do DriverManager.
        DriverManager.registerDriver(new org.postgresql.Driver());
        //Aqui criamos uma conexão para o envio de instruções SQL para o PostgreSQL.
        con = DriverManager.getConnection("jdbc:postgresql://localhost/odontologico",
                "postgres",
                "llucas");
    }

    public void salvar(Dentista dentista) throws SQLException {
        //O caracter ? indica um parâmetro (valor) que será passado para a instrução.
        pstm = con.prepareStatement(
                "insert into dentista(nome,  endereco, email, telefone, data_nascimento, rg, cpf) values (?, ?, ?, ?, ?, ?, ?)");
        //Aqui passamos os valores de cada um dos parâmetros, na ordem que estão na instrução
        //SQL, da esquerda para direita.
        pstm.setString(1, dentista.getNome());
        pstm.setString(2, dentista.getEmail());
        pstm.setString(3, dentista.getEndereco());
        pstm.setInt(4, dentista.getTelefone());
        pstm.setInt(5, dentista.getRg());
        pstm.setInt(6, dentista.getCpf());
        pstm.execute();    //Após informar todos os parâmetros, mandamos executar a instrução.        
    }

    //O método alterar envia uma instrução UPDATE para o banco de dados PostgreSQL.
    public void alterar(Dentista dentista) throws SQLException {
        pstm = con.prepareStatement(
                "update dentista set nome = ?,  endereco = ?, email = ?, telefone = ?, data_nascimento = ?, rg = ?, cpf = ? where id = ?");
        pstm.setString(1, dentista.getNome());
        pstm.setString(2, dentista.getEndereco());
        pstm.setString(3, dentista.getEmail());
        pstm.setInt(4, dentista.getTelefone());
        pstm.setDate(5, dentista.getData_nascimento());
        pstm.setInt(6, dentista.getRg());
        pstm.setInt(7, dentista.getCpf());
        pstm.setInt(8, dentista.getId());   //Altera de acordo com o ID informado pelo usuário.
        pstm.execute();
    }

    //O método excluir envia uma instrução DELETE para o banco de dados PostgreSQL.
    public void excluir(Dentista dentista) throws SQLException {
        //Deleta o registro da tabela cujo ID é informado no parâmetro da instrução.
        pstm = con.prepareStatement(
                "delete from dentista where id = ?");
        pstm.setInt(1, dentista.getId());  //Exclui de acordo com o ID informado pelo usuário.
        pstm.execute();
    }

    //O método pesquisar será utilizado para buscar um registro da tabela de MP3
    //com base no ID da música, que é a chave primária da tabela MP3.
    public Dentista pesquisar(int id) throws SQLException {
        Dentista dentista = null;
        pstm = con.prepareStatement("select * from dentista where id = ?");
        pstm.setInt(1, id);
        rs = pstm.executeQuery();
        if (rs.next()) {
            dentista = new Dentista();
            dentista.setId(rs.getInt("id"));
            dentista.setNome(rs.getString("nome"));
            dentista.setEndereco(rs.getString("endereco"));
            dentista.setEmail(rs.getString("email"));
            dentista.setTelefone(rs.getInt("telefone"));
            dentista.setData_nascimento(rs.getDate("data_nascimrento"));
            dentista.setRg(rs.getInt("rg"));
            dentista.setCpf(rs.getInt("cpf"));
        }
        return dentista;
    }

    public List<Dentista> getTodosDentista(int ordem) throws SQLException{
        ArrayList<Dentista> nome = new ArrayList();  //Cria uma lista de mÃºsicas vazia.
        Dentista dentista = null;  //Define um objeto do tipo Mp3 tambÃ©m vazio.
        
        switch(ordem){
            case ORDEM_POR_ID:
                pstm = con.prepareStatement("select * from consulta order by id");
                break;
            case ORDEM_POR_NOME:
                pstm = con.prepareStatement("select * from consulta order by nome");
        }
        
        rs = pstm.executeQuery();  
        while(rs.next()){          
            dentista = new Dentista();
            dentista.setId(rs.getInt("id"));
            dentista.setNome(rs.getString("nome"));
     }
        
        return nome;
     }
}
